package dao;

import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedList;
import java.util.Set;

import com.sun.org.apache.xml.internal.security.keys.ContentHandlerAlreadyRegisteredException;

import daosbd.DaoGenericoJPA;
import excecoes.ChaveJaExisteException;
import excecoes.DAOException;

import allaboutmybook.PersonagemLivro;
import antlr.collections.List;

public class DAOConcretoPersonagensLivro extends DaoGenericoJPA<PersonagemLivro>   implements DAOPersonagensLivro
{
	
	
	public DAOConcretoPersonagensLivro()
	{
		
	}

	@Override
	public PersonagemLivro pegarPersonagemLivro(String nomePersonagem) throws DAOException 
	{
		try
		{
			return this.encontrarPorId(nomePersonagem);
		}
		catch(DAOException exc)
		{
			throw new DAOException(exc);
		}
		
	}

	@Override
	public LinkedList<String> pegarNomesPersonagens() throws DAOException
	{
		try
		{
			@SuppressWarnings("unchecked")
			java.util.List<PersonagemLivro> conjuntoNomesPersonagens = this.encontrarTodos();
			Iterator<PersonagemLivro> iteraConjuntoNomesPersonagens = conjuntoNomesPersonagens.iterator();
			LinkedList<String> listaNomesPersonagens = new LinkedList<String>();
			while(iteraConjuntoNomesPersonagens.hasNext() == true)
			{
				String nomeUnicoPersonagem = iteraConjuntoNomesPersonagens.next().getNomePersonagem();
				listaNomesPersonagens.add(nomeUnicoPersonagem);
				
			}
			
			return listaNomesPersonagens;
		}
		catch(DAOException exc)
		{
			throw new DAOException(exc);
		}
		
		
	}

	@Override
	public void apagarPersonagemDaLista(String nomePersonagem) throws DAOException
	{
		try
		{
			System.out.println("<><><><> personagem apagar no DAOConcreto:" + nomePersonagem );
			this.removerEntidade(nomePersonagem);
		}
		catch(DAOException exc)
		{
			throw new DAOException(exc);
		}
		
		
	}

	@Override
	public void adicionarPersonagemParaLista(String nomePersonagem,
			String descricaoPersonagem) throws DAOException, ChaveJaExisteException
	{
		try
		{
			PersonagemLivro novoPersonagem = new PersonagemLivro();
			novoPersonagem.setNomePersonagem(nomePersonagem);
			novoPersonagem.setDescricaoPersonagem(descricaoPersonagem);
			if(this.encontrarPorId(nomePersonagem) != null)
			{
				throw new ChaveJaExisteException();
			}
			else
			{
				this.adicionarEntidade(novoPersonagem);
			}
			
		}
		catch(DAOException exc)
		{
			throw new DAOException(exc);
		}
		
	}
	
	public void editarPersonagemDaLista(String nomePersonagem,
			String descricaoPersonagem) throws DAOException
	{
		try
		{
			PersonagemLivro novoPersonagem = new PersonagemLivro();
			novoPersonagem.setNomePersonagem(nomePersonagem);
			novoPersonagem.setDescricaoPersonagem(descricaoPersonagem);
			
			this.updateEntidade(novoPersonagem);
		}
		catch(DAOException exc)
		{
			throw new DAOException(exc);
		}
	}
	
	

}
